/*
 * Carteira.cpp
 *
 *  Created on: 20/08/2012
 *      Author: Manoela Camila
 */

#include "Carteira.h"
using namespace std;
using std::list;
/*Variável global que controla o número da carteira*/

Carteira::Carteira(){
    numCarteira = 0;
    quantidade = 0;
}


/*Construtor de Cópia*/
Carteira::Carteira(Carteira &car){

	list<ItemCarteira>::iterator iter;

	numCarteira = car.numCarteira;

	iter = car.itens.begin();
	while (iter != car.itens.end()){
		itens.push_back((*iter));
		iter++;
	}
}

/*Destrutor*/
Carteira::~Carteira(){

	itens.clear();

}

/*Retorna o número da carteira*/
int Carteira::getNumCarteira() const{

	return numCarteira;
}

/*atribui um valor ao número da carteira*/
void Carteira::setNumCarteira(int num){

	numCarteira = num;

}

/*método que atualiza a carteira de Vacina*/
void Carteira::atualizarCarteira (Vacina vac, Data dataAplic){
	itens.push_back(ItemCarteira (dataAplic, vac));
	quantidade++;
}

void Carteira::consultarCarteira(){
    for(list<ItemCarteira>::iterator itensIter = itens.begin(); itensIter != itens.end(); itensIter++){
        (*itensIter).consultarItem();
        cout << endl;
    }
}

/*Sobrecarga do operador de fluxo << - cout*/
ostream& operator<<(ostream &o, Carteira &cart){
	o << cart.quantidade << endl;
	list<ItemCarteira>::iterator iter;
	iter = cart.itens.begin();

		while (cart.itens.end() != iter){
			o << (*iter) << endl;
			iter++;
		}
	return o;
}

istream& operator>>(istream &in, Carteira &cart){
	in >> cart.quantidade;
	in.ignore();
	int auxQuant = cart.quantidade;
	int dia, mes, ano;

	int pk;
	string descricao;
	int idade;
	double preco;
	while(auxQuant){
		in >> pk;
		in.ignore();
		in >> descricao;
		in.ignore();
		in >> idade;
		in.ignore();
		in >> preco;
		in.ignore();
		in >> dia;
		in.ignore(1);
		in >> mes;
		in.ignore(1);
		in >> ano;
		ItemCarteira auxItemCarteira(dia, mes, ano, descricao, idade, preco);
		cart.itens.push_back(auxItemCarteira);
		auxItemCarteira.consultarItem();
		auxQuant--;
		in.ignore();
		in.ignore();
	}
	return in;

}


/*sobrecarga do operador de igualdade*/
bool Carteira::operator==(Carteira &cart){

	if (numCarteira == cart.numCarteira){
		list<ItemCarteira>::iterator iter;
		list<ItemCarteira>::iterator iter1;
		iter = itens.begin();
		iter1 = cart.itens.begin();
		while (iter != itens.end() && iter1 != cart.itens.end()){
			if ((*iter) != (*iter1))
				return false;
			iter++;
			iter1++;
		}
		if (iter == itens.end() && iter1 == cart.itens.end())
			return true;
		return false;
	} else
		return false;
}

/*sobrecarga do operador de desigualdade*/
bool Carteira::operator!=(Carteira &cart){

	if (numCarteira != cart.numCarteira){
		list<ItemCarteira>::iterator iter;
		list<ItemCarteira>::iterator iter1;
		iter = itens.begin();
		iter1 = cart.itens.begin();
		while (iter != itens.end() && iter1 != cart.itens.end()){
			if ((*iter) != (*iter1))
				return true;
			iter++;
			iter1++;
		}
		if (iter == itens.end() && iter1 == cart.itens.end())
			return false;
		return true;
	} else
		return true;
}
